package server.secretaria;

import server.Control;
import persistencia.*;
import persistencia.dominio.AccesoPagina;
import persistencia.dominio.Actualizacion;
import persistencia.dominio.Log;
import persistencia.dominio.Modulo;
import persistencia.dominio.Persona;
import java.sql.*;
import java.util.Iterator;
import java.util.Vector;
import comun.constantes.ACCIONES_A_REALIZAR;
import comun.constantes.ESTADO_GRUPOS;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */

public class ControlActualizaciones extends Control {

  public ControlActualizaciones(Persistencia persistencia) {
      this.persistencia = persistencia;
    }

    public ControlActualizaciones(Connection conexion) {
      this.conexionSQL = conexion;
    }
    
    public Vector getTodasLasActualizaciones() throws Exception{
          Vector actualizaciones = persistencia.getObjectosPorClaseYFiltro
          ("persistencia.dominio.Actualizacion", "fecha descending","",null);
          return actualizaciones;
    }
    
    public AccesoPagina getUltimoAcceso(Long idPersona)throws Exception{
  		  Vector accesos = new Vector(); 
  		  String filtro = "persona.id == "+idPersona;
  		  accesos = persistencia.getObjectosPorClaseYFiltro("persistencia.dominio.AccesoPagina","fechaHoraEntrada descending",filtro);
  		  //Nunca accedio o es la primera vez que lo hace; por lo tanto debe ver las actualizaciones hechas
  		  if(accesos.size()<=1){
  			  return null;
  		  //Tiene mas de un acceso al SIAT, sacamos siempre el segundo mas actual
  		  }else{
  			  return (AccesoPagina)accesos.elementAt(1);
  		  }	  
    }
    
    public boolean existenActualizacionesPendientesParaVer(Long idPersona)throws Exception{

    		  AccesoPagina ultAccesoPagina = this.getUltimoAcceso(idPersona);
    		  if(ultAccesoPagina == null){
      			  return true;
    		  }else{
    			  java.sql.Timestamp fechaUltAcc = ultAccesoPagina.getFechaHoraEntrada();
	    		  String parametros = "java.sql.Timestamp fechaUltAcc";
	    		  String filtro = "fecha >= fechaUltAcc";
	    		  filtro += " & estado == \""+ ESTADO_GRUPOS.VISIBLE+"\"";
	    		  Vector actualizaciones = persistencia.getObjectosPorClase("persistencia.dominio.Actualizacion",
	    				     "fecha descending",filtro,"",parametros,fechaUltAcc,null,null);
	    		  /*System.out.println("-------------------------------------------------------------------------");
	    		  System.out.println("fechaUltAcc.toLocaleString(): "+fechaUltAcc.toLocaleString());
	    		  System.out.println("filtro: "+filtro);
	    		  System.out.println("actualizaciones.isEmpty(): "+actualizaciones.isEmpty());
	    		  System.out.println("-------------------------------------------------------------------------");*/
	    		  return !actualizaciones.isEmpty();
    		  }	  
    }
    
    public String crearModificarActualizacion(Long idAct, String nombre, String estado,String detalle, String dia, String mes, String anio, String ubicacionFisica)throws Exception{
  		  if(idAct==null){
  			  Actualizacion actualizacion = new Actualizacion();
    		  actualizacion.setNombre(nombre);
    		  actualizacion.setEstado(estado);
    		  actualizacion.setDetalle(detalle);
    		  actualizacion.setFecha(utils.Utils.hoySqlDate());
    		  //actualizacion.setFecha(utils.Utils.comienzoDia(utils.Utils.getTimestamp(dia,mes,anio)));
    		  actualizacion.setubicFisicaArchActualizbicFisicaArchActualiz(ubicacionFisica);
    		  persistencia.hacerPersistente(actualizacion);  
  		  }else{
  			Actualizacion actualizacion = (Actualizacion)persistencia.getObjectoPorId("persistencia.dominio.Actualizacion",idAct);
  			actualizacion.setNombre(nombre);
  			actualizacion.setEstado(estado);
  			actualizacion.setDetalle(detalle);
  			actualizacion.setFecha(utils.Utils.hoySqlDate());
  			//actualizacion.setFecha(utils.Utils.comienzoDia(utils.Utils.getTimestamp(dia,mes,anio)));
  			actualizacion.setubicFisicaArchActualizbicFisicaArchActualiz(ubicacionFisica);
  		  }  		   
  		  return comun.constantes.TEXTOS.ACTUALIZACION_DE_DATOS_EXITOSA;
  	}
    
    public String crearModificarLogs(Long idLog,String titulo,String detalle, String estado, String observaciones, String idResponsable, String idModulo)throws Exception{
      		  if(idLog==null){
      			  Log log = new Log();
      			  log.setTitulo(titulo);
      			  log.setDetalle(detalle);
      			  log.setEstado(estado);
      			  log.setObservaciones(observaciones);
      			  persistencia.hacerPersistente(log);
      			  Persona persona = (Persona)this.persistencia.getObjectoPorId("persistencia.dominio.Persona",Long.valueOf(idResponsable));
      			  log.setPersona(persona);
      			  Modulo modulo = (Modulo)this.persistencia.getObjectoPorId("persistencia.dominio.Modulo",Long.valueOf(idModulo));
      			  log.setModulo(modulo);
      		  }else{
      			  Log log = (Log)persistencia.getObjectoPorId("persistencia.dominio.Log",idLog);
      			  log.setTitulo(titulo);
    			  log.setDetalle(detalle);
    			  log.setEstado(estado);
    			  log.setObservaciones(observaciones);
    			  Persona persona = (Persona)this.persistencia.getObjectoPorId("persistencia.dominio.Persona",Long.valueOf(idResponsable));
      			  log.setPersona(persona);
    		  }	  
    		  return comun.constantes.TEXTOS.ACTUALIZACION_DE_DATOS_EXITOSA;
    }
    
    public String crearModificarModulo(Long idLog,String titulo,String idActualizacion)throws Exception{
   		  if(idLog==null){
    			  Modulo modulo = new Modulo();
    			  modulo.setNombre(titulo);
       			  persistencia.hacerPersistente(modulo);
    			  Actualizacion actualizacion = (Actualizacion)this.persistencia.getObjectoPorId("persistencia.dominio.Actualizacion",Long.valueOf(idActualizacion));
    			  modulo.setActualizacion(actualizacion);
    		  }else{
    			  Modulo modulo = (Modulo)persistencia.getObjectoPorId("persistencia.dominio.Modulo",idLog);
    			  modulo.setNombre(titulo);
  		  }	  
  		  return comun.constantes.TEXTOS.ACTUALIZACION_DE_DATOS_EXITOSA;
  }
    
    public String eliminar(Long id, String accion)throws Exception{

      		  if(accion.compareTo(ACCIONES_A_REALIZAR.ELIMINAR_ACTUALIZACION)==0){
      			  Actualizacion actualizacion = (Actualizacion)persistencia.getObjectoPorId("persistencia.dominio.Actualizacion",id);
      			for (Iterator i = actualizacion.getModulos().iterator(); i.hasNext();) {
      				Modulo modulo = (Modulo) i.next();
      				for (Iterator j = modulo.getLogs().iterator(); j.hasNext();) {
    					Log log = (Log) j.next();
    					persistencia.deletePersistente(log);
          			}
      				persistencia.deletePersistente(modulo);
      			  }
      			  persistencia.deletePersistente(actualizacion);
      		  }else if(accion.compareTo(ACCIONES_A_REALIZAR.ELIMINAR_MODULO)==0){
      			  Modulo modulo = (Modulo)persistencia.getObjectoPorId("persistencia.dominio.Modulo",id);
      			  for (Iterator i = modulo.getLogs().iterator(); i.hasNext();) {
					Log log = (Log) i.next();
					persistencia.deletePersistente(log);
      			  }
      			  persistencia.deletePersistente(modulo);
      		  }else{//Entonces es ACCIONES_A_REALIZAR.ELIMINAR_LOGS
      			  Log log = (Log)persistencia.getObjectoPorId("persistencia.dominio.Log",id);
      			  persistencia.deletePersistente(log);
      		  }    		  	  
    		  return comun.constantes.TEXTOS.ACTUALIZACION_DE_DATOS_EXITOSA;
    }  
}